package Objetos 
{
	import flash.display.MovieClip;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	import Levels.Level;
	/**
	 * ...
	 * @author ...
	 */
	public class Heroi extends MovieClip
	{
		protected var NB_velocidadeY	:Number;
		protected var NB_velocidadeX	:Number;
		protected var NB_gravidade		:Number;
		protected var MC_tiro			:Tiro;
		
		protected var BO_dir 			:Boolean;
		protected var BO_esq			:Boolean;
		public var BO_pulando			:Boolean;
		
		public var UI_player			:uint;
			
		public function Heroi(player:uint) 
		{
			NB_velocidadeY = 0;
			NB_gravidade = 0.9;
			NB_velocidadeX = 5; //se fosse criar uma aceleração do eixo X, deixaria zero
			
			UI_player = player;
			
			Main.getStage().addEventListener(KeyboardEvent.KEY_DOWN, pressionar, false, 0, true)
			Main.getStage().addEventListener(KeyboardEvent.KEY_UP, soltar, false, 0, true)
			
			Level.AR_tiros = new Array;
		}
		
		public function update():void //o enter_frame vai ser declarado na Main
		{
			this.y += NB_velocidadeY;
			NB_velocidadeY += NB_gravidade;
			
			controlarHeroi();
		}
		
		public function pressionar (e:KeyboardEvent):void
		{
			if (UI_player == 1)
			{
				switch(e.keyCode)
				{
					case Keyboard.D :
						BO_dir = true;
						if (this.scaleX < 0)
						{
						this.scaleX *= -1						
						}				
						break;
						
					case Keyboard.A :
						BO_esq = true;
						if (this.scaleX > 0)
						{
						this.scaleX *= -1						
						}	
						break;
					
					case Keyboard.SPACE :
						criarTiro();
						break;
				}
				
				if (BO_pulando == false)
				{
					switch (e.keyCode)
					{
						case Keyboard.W :
							NB_velocidadeY -= 13;
							BO_pulando = true;
							break;
					}
				}
			}
			
			if (UI_player == 2)
			{
				switch(e.keyCode)
				{
					case Keyboard.RIGHT  :
						BO_dir = true;
						if (this.scaleX < 0)
						{
						this.scaleX *= -1						
						}				
						break;
						
					case Keyboard.LEFT :
						BO_esq = true;
						if (this.scaleX > 0)
						{
						this.scaleX *= -1						
						}	
						break;
					
					case Keyboard.NUMPAD_0 :
						criarTiro();
						break;
				}
				
				if (BO_pulando == false)
				{
					switch (e.keyCode)
					{
						case Keyboard.UP :
							NB_velocidadeY -= 13;
							BO_pulando = true;
							break;
					}
				}
			}
		}
		
		public function criarTiro():void
		{
			if(UI_player == 1)
			{ 
				if(this.scaleX > 0)
				{
					MC_tiro = new Tiro("direita","preto",UI_player);
					MC_tiro.x = this.x + 20;
				}
				
				else 
				{
					MC_tiro = new Tiro("esquerda","preto",UI_player);
					MC_tiro.x = this.x - 20;
				}
			}
			
			if(UI_player == 2)
			{ 
				if(this.scaleX > 0)
				{
					MC_tiro = new Tiro("direita","vinho",UI_player);
					MC_tiro.x = this.x + 20;
				}
				
				else 
				{
					MC_tiro = new Tiro("esquerda","vinho",UI_player);
					MC_tiro.x = this.x - 20;
				}
			}
			
				MC_tiro.y = this.y;
				Main.getInstance().MC_tela.addChild(MC_tiro);
				Level.AR_tiros.push(MC_tiro);


		}
		
		public function soltar (e:KeyboardEvent):void
		{
			if (UI_player == 1)
			{	
				switch(e.keyCode)
				{
					case Keyboard.D :
						BO_dir = false;
						break;
						
					case Keyboard.A :
						BO_esq = false;
						break;
				}
			}
			
			if (UI_player == 2)
			{	
				switch(e.keyCode)
				{
					case Keyboard.RIGHT :
						BO_dir = false;
						break;
						
					case Keyboard.LEFT:
						BO_esq = false;
						break;
				}
			}
		} 
		
		public function controlarHeroi():void  //não faz diferença criar aqui ou dentro da update, ela está sendo chamada pelo controleHeroi()
		{
			if (BO_dir)
			{
				this.x += NB_velocidadeX;
			}
			
			if (BO_esq)
			{
				this.x -= NB_velocidadeX;
			}
		}
		
		public function set trocarVelocidadeY(a:Number):void
		{
			NB_velocidadeY = a;
		}
		
		public function get getVelocidadeY():Number //em qualquer lugar ele pode te dizer o valor da velocidadeY, ela lê a saída, e tem que ter o msm valor da var **tipo do retorno():o q ele vai retornar**
		{
			return this.NB_velocidadeY;
		}

		public function removerTiros():void
		{
			for (var t:int = 0; t < Level.AR_tiros.length; t++)
			{
				if (Level.AR_tiros[t].x > Main.getInstance().stage.stageWidth)
				{
					Main.getInstance().MC_tela.removeChild(Level.AR_tiros[t]);
					Level.AR_tiros.splice(t, 1);
				}
			}			
		}
	}

}